Принцип відкритості/закритості (OCP)

📌 Що таке OCP?

Принцип відкритості/закритості (Open/Closed Principle) говорить про те, що клас повинен бути відкритий для розширення, але закритий для змін. Це означає, що ми можемо додавати новий функціонал без зміни існуючого коду.

🛠 Приклад порушення OCP

У цьому класі, якщо потрібно додати новий тип знижки, доведеться змінювати код класу:

                
public class DiscountService {
    public double applyDiscount(String type, double price) {
        if (type.equals("NEWYEAR")) {
            return price * 0.9;
        } else if (type.equals("BLACKFRIDAY")) {
            return price * 0.8;
        }
        return price;
    }
}
                
            

✅ Виправлення OCP

Використовуємо **інтерфейс** та **стратегію**, щоб додавати нові типи знижок без зміни коду класу.

                
public interface DiscountStrategy {
    double applyDiscount(double price);
}

public class NewYearDiscount implements DiscountStrategy {
    public double applyDiscount(double price) {
        return price * 0.9;
    }
}

public class BlackFridayDiscount implements DiscountStrategy {
    public double applyDiscount(double price) {
        return price * 0.8;
    }
}

public class DiscountService {
    public double applyDiscount(DiscountStrategy strategy, double price) {
        return strategy.applyDiscount(price);
    }
}
                
            

Назад Далі